/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        
        if(!root)
            return true;
        else
            return (
                isBalanced(root->left)  &&     // 判断左子树
                isBalanced(root->right) &&      // 判断右子树
                (abs( Depth(root->left) - Depth(root->right) ) <= 1)   // 深度之差是否 <= 1
            );
    }
    
private:
    int Depth(TreeNode* root){
        if(!root)
            return 0;
        else
            // 计算树的深度并返回： 逐层访问，每层都+1，且按最大深度来算，最后结果+1
            return 1 + max( Depth(root->left), Depth(root->right));       
    }
};